#include "SirNr.h"
#include <iomanip>
#include <cstdlib>
using std::exit;
using std::cerr;

SirNr::SirNr(int x){
	(*this).size=(x>0?x:10);
	(*this).ptr=new int[size];
	for(int i=0;i<(*this).size;i++){
	(*this).ptr[i]=0;
	}
}
void SirNr::citire(){
	
		for(int i=0;i<(*this).size;i++)
		{
			std::cout<<"V["<<i<<"]= ";
			std::cin>>(*this).ptr[i];
		}
}
void SirNr::afisare()const{
	for(int i=0;i<(*this).size;i++)
		std::cout<<"\n"<<(*this).ptr[i];
}
void SirNr::add(int nr){
	(*this).size=(*this).size+1;
	(*this).ptr[(*this).size-1]=nr;
}
int SirNr::getSize()const{
	return (*this).size;
}
int SirNr::minim(){
int min=(*this).ptr[0];
for(int i=1;i<getSize();i++)
	{
		if(min>(*this).ptr[i])
				min=(*this).ptr[i];
	}
	return min;
}

void SirNr::ordonare(){
		int i,j,aux; 
     for (i = 1; i <getSize(); i++)
     { 
        j = i; 
        while (j>0 && (*this).ptr[j-1]>(*this).ptr[j])
        { 
            aux=(*this).ptr[j]; 
            (*this).ptr[j]= (*this).ptr[j-1]; 
            (*this).ptr[j-1]=aux; 
            j--; 
        } 
		} 
}
const SirNr& SirNr::operator+(const SirNr& right){
	int n;
	n=getSize()+right.getSize();
	int x;
	(*this).size+=right.getSize();
	for(int i=getSize();i<n;i++)
		{
			(*this).ptr[i]=right.ptr[i];
		}
	return *this;
}
const SirNr& SirNr::operator =(const SirNr &right){

if(&right!=this)
	{
		if(size!=right.size)
		{
		delete [] ptr;
		size=right.size;
		ptr=new int[size];
		}

	for(int i=0;i<(*this).size;i++)
	(*this).ptr[i]=right.ptr[i];
	}
	return *this;
}
int SirNr::operator *(const SirNr &right){
		int n;
	n=getSize();
	int s=0;
	for(int i=0;i<n;i++)
		{
			s=s+((*this).ptr[i]*right.ptr[i]);
		}
	return s;
}
bool SirNr::operator==(const SirNr &right)const{
	if((*this).size!=right.size)
		return false;

	for(int i=0;i<(*this).size;i++)
	if((*this).ptr[i]!=right.ptr[i])
		return false;

	return true;
}
int &SirNr::operator[](int sub){
if(sub<0||sub>=(*this).size)
{	cerr<<"error subscript"<<sub<<"\n";
	exit(1);}
return ptr[sub];
}
int SirNr::operator[](int sub)const{
if(sub<0||sub>=(*this).size)
{	cerr<<"error subscript"<<sub<<"\n";
	exit(1);}
return (*this).ptr[sub];
}

std::ostream& operator<<(std::ostream &out,const SirNr &ar){
for(int i=0;i<ar.size;i++)
	out<<ar.ptr[i]<<" ";
return out;

}
std::istream& operator>>(std::istream &inp,SirNr& ar){
	for(int i=0;i<ar.size;i++)
	inp>>ar.ptr[i];
	return inp;

}

